home *** CD-ROM | disk | FTP | other *** search
- /*
- ** Message
- */
-
- #include "include/config.h"
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "include/mui.h"
- #include <proto/utility.h>
- #include <MUI/NListview_mcc.h>
-
- #include "include/gui.h"
- #include "include/napster.h"
- #include "include/msg.h"
- #include "amster_Cat.h"
- #include "include/protos.h"
-
- ULONG msg_new(struct IClass *cl, Object *obj, struct opSet *msg);
- void msg_say(struct msgdata *data);
- void msg_whois(struct msgdata *data, char *info);
- void msg_whowas(struct msgdata *data, char *user, char *level, u_long lastseen);
- char *msg_make(int d, char *nick, char *msg);
-
-
- MUIF msg_dispatch(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
- {
- struct msgdata *data = INST_DATA(cl,obj);
-
- switch(msg->MethodID) {
- case OM_NEW: return(msg_new(cl,obj,(APTR)msg));
- case MSG_OPEN:
- set(obj,MUIA_Window_Open,TRUE);
- return(NULL);
- case MSG_GOT:
- {
- struct msgdata *data = INST_DATA(cl,obj);
- long winopen;
-
- get(obj, MUIA_Window_Open, &winopen);
- if (!winopen) set(obj, MUIA_Window_Open, TRUE);
-
- DoMethod(data->msglist,MUIM_NList_InsertSingle,(char*)((muimsg)msg)->arg1,MUIV_NList_Insert_Bottom);
- set(data->msglist,MUIA_NList_First,MUIV_NList_Active_Bottom);
- return(NULL);
- }
- case MSG_SAY:
- msg_say(data);
- return(NULL);
- case MSG_WHOIS:
- msg_whois(data, (char *)(((muimsg)msg)->arg1));
- return(NULL);
- case MSG_WHOWAS:
- msg_whowas(data, (char *)(((muimsg)msg)->arg1), (char *)(((muimsg)msg)->arg2), (u_long)(((muimsg)msg)->arg3));
- return(NULL);
-
- }
- return(DoSuperMethodA(cl,obj,msg));
- }
-
-
- ULONG msg_new(struct IClass *cl, Object *obj, struct opSet *msg)
- {
- struct msgdata *data;
- Object *msglist,*msgstr;
-
- if (obj = (Object *)DoSuperNew(cl, obj,
- MUIA_HelpNode, "messenger",
- WindowContents, VGroup,
- Child, NListviewObject,
- MUIA_NListview_NList, msglist = NListObject,
- ReadListFrame,
- MUIA_NList_Input, FALSE,
- MUIA_NList_DefaultObjectOnClick, FALSE,
- MUIA_NList_ConstructHook, MUIV_NList_ConstructHook_String,
- MUIA_NList_DestructHook, MUIV_NList_DestructHook_String,
- MUIA_NList_Format, "",
- MUIA_NList_AutoCopyToClip, TRUE,
- MUIA_NList_TypeSelect, MUIV_NList_TypeSelect_Char,
- MUIA_NList_AutoVisible, TRUE,
- End,
- End,
- Child, msgstr = StringObject,
- StringFrame,
- MUIA_CycleChain, 1,
- MUIA_String_MaxLen, 256,
- End,
- End,
- TAG_MORE, msg->ops_AttrList))
- {
- data = INST_DATA(cl,obj);
- data->msglist = msglist;
- data->msgstr = msgstr;
-
- set(obj,MUIA_Window_ID,MAKE_ID('M','E','S','G'));
- set(obj,MUIA_Window_Title,MSG_USER_TITLE),
-
- DoMethod(msgstr,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,obj,1,MSG_SAY);
- DoMethod(msgstr,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,obj,3,MUIM_Set,MUIA_Window_ActiveObject,msgstr);
- DoMethod(msgstr,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,msgstr,3,MUIM_Set,MUIA_String_Contents,NULL);
- DoMethod(obj,MUIM_Notify,MUIA_Window_Activate,TRUE,obj,3,MUIM_Set,MUIA_Window_ActiveObject,msgstr);
- DoMethod(obj,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,obj,3,MUIM_Set,MUIA_Window_Open,FALSE);
-
- return((ULONG)obj);
- }
- return(0);
- }
-
-
- void msg_say(struct msgdata *data)
- {
- u_long tmp;
- char *cmd,*args;
-
- if(!gui_napon) {
- DoMethod(data->msglist,MUIM_NList_InsertSingle,msg_make(2,NULL,(char *)MSG_USER_NOTCONN),MUIV_NList_Insert_Bottom);
- set(data->msglist,MUIA_NList_First,MUIV_NList_Active_Bottom);
- return;
- }
- GetAttr(MUIA_String_Acknowledge,data->msgstr,&tmp);
- cmd = strtok((char*)tmp," ");
- args = strtok(NULL,"");
- if(!cmd) return;
-
- if(stricmp(cmd,"/whois")==0)
- nap_sendbuf(NAPC_WHOIS,args);
- else {
- sprintf(nap_buf,"%s %s",cmd,args);
- nap_send(NAPC_PRIVATEMSG);
- DoMethod(data->msglist,MUIM_NList_InsertSingle,msg_make(1,cmd,args),MUIV_NList_Insert_Bottom);
- set(data->msglist,MUIA_NList_First,MUIV_NList_Active_Bottom);
- }
- }
-
-
- void msg_whois(struct msgdata *data, char *info)
- {
- char buf[1024];
- char *nick, *level, *channels, *status, *client;
- int time, shared, downloads, uploads, link;
-
- nick = nap_token(&info);
- level = nap_token(&info);
- time = nap_ltoken(&info);
- channels = nap_token(&info);
- status = nap_token(&info);
- shared = nap_itoken(&info);
- downloads = nap_itoken(&info);
- uploads = nap_itoken(&info);
- link = nap_itoken(&info);
- client = nap_token(&info);
- sprintf(buf, "\33bUser: %s (level: %s) - online: %d:%02d:%02d (%s)",
- nick, level, time/360, (time/60)%60, time%60, status);
- DoMethod(data->msglist, MUIM_NList_InsertSingle, buf, MUIV_NList_Insert_Bottom);
-
- if (channels != NULL) {
- sprintf(buf, "\33bChannels: %s", channels);
- DoMethod(data->msglist, MUIM_NList_InsertSingle, buf, MUIV_NList_Insert_Bottom);
- }
- sprintf(buf, "\33bShares: %d, downloads: %d, uploads: %d",
- shared, downloads, uploads);
- DoMethod(data->msglist, MUIM_NList_InsertSingle, buf, MUIV_NList_Insert_Bottom);
-
- sprintf(buf, "\33bClient: %s, link: %s", client, nap_linktype[link]);
- DoMethod(data->msglist, MUIM_NList_InsertSingle, buf, MUIV_NList_Insert_Bottom);
-
- set(data->msglist, MUIA_NList_First, MUIV_NList_Active_Bottom);
- }
-
-
- void msg_whowas(struct msgdata *data, char *user, char *level, u_long lastseen)
- {
- struct ClockData *cd;
- char buf[1024];
-
- lastseen -= (8*365+2)*24*60*60;
- /* Number of seconds between January 1st/0:00, 1970 and January 1st/0:00, 1978 */
-
- if (cd = malloc(sizeof(struct ClockData))) {
- Amiga2Date(lastseen, cd);
- sprintf(buf, "\33bUser: %s (level: %s) - last seen: %02d/%02d/%d %02d:%02d:%02d", user, level, cd->month, cd->mday, cd->year, cd->hour, cd->min, cd->sec);
- free(cd);
- DoMethod(data->msglist, MUIM_NList_InsertSingle, buf, MUIV_NList_Insert_Bottom);
- }
- else gui_debug("Out of memory: msg_whowas()");
- }
-
-
- void msg_got(char *nick, char *msg)
- {
- char *tmp;
-
- tmp = msg_make(0,nick,msg);
- if(tmp) DoMethod(gui->mwin,MSG_GOT,tmp);
- }
-
-
- void msg_gotwhois(char *buf)
- {
- DoMethod(gui->mwin, MSG_WHOIS, buf);
- }
-
-
- char *msg_make(int d, char *nick, char *msg)
- {
- static char buf[1024];
-
- if(d==0)
- sprintf(buf,"<%s> \33b%s",nick,msg);
- else if(d==1)
- sprintf(buf,"<%s> \33i%s",nick,msg);
- else if(d==2)
- sprintf(buf,"* %s",msg);
-
- return(buf);
- }
-